package com.hutou.chuangke.uitl;

import android.text.TextUtils;

import com.hutou.chuangke.MainApplication;

import java.io.File;
import java.io.FileInputStream;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;

/**
 * @author peter_wang
 * @create-time 16/3/5 10:19
 */
public class FileUtil {
    public static final String DOWNLOAD_DIR = MainApplication.getApp().getExternalFilesDir(null) + "/download";

    private FileUtil() {
    }

    /***
     * 获取文件大小
     ***/
    public static long getFileSizes(File f) throws Exception {
        long s = 0;
        if (f.exists()) {
            FileInputStream fis = null;
            fis = new FileInputStream(f);
            s = fis.available();
        } else {
            f.createNewFile();
            System.out.println("文件不存在");
        }
        return s;
    }

    /***
     * 获取文件夹大小
     ***/
    public static long getDirFileSize(File f) {
        long size = 0;
        File flist[] = f.listFiles();
        for (int i = 0; i < flist.length; i++) {
            if (flist[i].isDirectory()) {
                size = size + getDirFileSize(flist[i]);
            } else {
                size = size + flist[i].length();
            }
        }
        return size;
    }

    /***
     * 转换文件大小单位(b/kb/mb/gb)
     ***/
    public static String FormetFileSize(long fileS) {// 转换文件大小
        DecimalFormat df = new DecimalFormat("#.00");
        String fileSizeString = "";
        if (fileS < 1024) {
            fileSizeString = df.format((double) fileS) + "B";
        } else if (fileS < 1048576) {
            fileSizeString = df.format((double) fileS / 1024) + "K";
        } else if (fileS < 1073741824) {
            fileSizeString = df.format((double) fileS / 1048576) + "M";
        } else {
            fileSizeString = df.format((double) fileS / 1073741824) + "G";
        }
        return fileSizeString;
    }

    /**
     * 递归删除文件及文件夹
     *
     * @param file 要删除的文件夹
     */
    public static void delete(File file) {
        if (file.isFile()) {
            file.delete();
            return;
        }

        if (file.isDirectory()) {
            File[] childFiles = file.listFiles();
            if (childFiles == null || childFiles.length == 0) {
                file.delete();
                return;
            }

            for (int i = 0; i < childFiles.length; i++) {
                delete(childFiles[i]);
            }
            file.delete();
        }
    }

    public static void deleteFile(File file) {
        if (file.exists()) { // 判断文件是否存在
            if (file.isFile()) { // 判断是否是文件
                file.delete(); // delete()方法 你应该知道 是删除的意思;
            } else if (file.isDirectory()) { // 否则如果它是一个目录
                File files[] = file.listFiles(); // 声明目录下所有的文件 files[];
                for (int i = 0; i < files.length; i++) { // 遍历目录下所有的文件
                    deleteFile(files[i]); // 把每个文件 用这个方法进行迭代
                }
            }
            file.delete();
        } else {

        }
    }

//    /**
//     * 获取下载的所有文件
//     *
//     * @return 下载的所有文件
//     */
//    public static List<File> getDownloadAllFile() {
//        return getAllFile(getDownloadFileDir());
//    }
//
//    public static List<File> getDownloadAllFile(String routePath) {
//        return getAllFile(routePath);
//    }

//    /**
//     * 获取下载的所有文件夹
//     *
//     * @return 下载的所有文件
//     */
//    public static List<File> getDownloadAllDirFile() {
//        List<File> fileList = new ArrayList<>();
//        File routeFile = new File(getDownloadFileDir());
//        if (routeFile.isDirectory()) {
//            File[] childFiles = routeFile.listFiles();
//            for (File file : childFiles) {
//                if (file.isDirectory()) {
//                    File[] secondChildFiles = file.listFiles();
//                    for (File secondFile : secondChildFiles) {
//                        if (!secondFile.isDirectory()) {
//                            if (!secondFile.getName().startsWith(DownloadUtil.DOWNLOADING_FILE_FLAG)) {
//                                fileList.add(file);
//                                break;
//                            }
//                        }
//                    }
//                }
//            }
//        }
//        return fileList;
//    }
//
//    /**
//     * 获取下载的文件夹里的文件个数
//     *
//     * @return 下载文件个数
//     */
//    public static int getDownloadDirFileNum(File routeFile) {
//        int num = 0;
//        if (routeFile.isDirectory()) {
//            File[] childFiles = routeFile.listFiles();
//            for (File file : childFiles) {
//                if (!file.isDirectory()) {
//                    if (!file.getName().startsWith(DownloadUtil.DOWNLOADING_FILE_FLAG)) {
//                        num++;
//                    }
//                }
//            }
//        }
//        return num;
//    }
//
//    /**
//     * 获取下载的文件夹里的文件总大小
//     *
//     * @return 下载文件总大小
//     */
//    public static long getDownloadDirFileCapacity(File routeFile) {
//        long capacity = 0;
//        if (routeFile.isDirectory()) {
//            File[] childFiles = routeFile.listFiles();
//            for (File file : childFiles) {
//                if (!file.isDirectory()) {
//                    if (!file.getName().startsWith(DownloadUtil.DOWNLOADING_FILE_FLAG)) {
//                        capacity += file.length();
//                    }
//                }
//            }
//        }
//        return capacity;
//    }
//
//    public static void deleteDownloadFiles() {
//        File file = new File(getDownloadFileDir());
//        deleteAlbumDir(file);
//    }
//
//    public static void deleteDownloadAlbum(String id) {
//        File file = new File(getDownloadFileDir(), id);
//        deleteAlbumDir(file);
//    }
//
//    /**
//     * 递归删除目录下的所有文件及子目录下所有文件
//     *
//     * @param dir 将要删除的文件目录
//     * @return boolean Returns "true" if all deletions were successful.
//     * If a deletion fails, the method stops attempting to
//     * delete and returns "false".
//     */
//    private static boolean deleteDir(File dir) {
//        if (dir.isDirectory()) {
//            String[] children = dir.list();
//            //递归删除目录中的子目录下
//            for (int i = 0; i < children.length; i++) {
//                boolean success = deleteDir(new File(dir, children[i]));
//                if (!success) {
//                    return false;
//                }
//            }
//        }
//        // 目录此时为空，可以删除
//        return dir.delete();
//    }
//
//    private static void deleteAlbumDir(File routeFile) {
//        if (routeFile.isDirectory()) {
//            File[] childFiles = routeFile.listFiles();
//            for (File file : childFiles) {
//                if (file.isDirectory()) {
//                    File[] secondChildFiles = file.listFiles();
//                    for (File secondFile : secondChildFiles) {
//                        if (!secondFile.isDirectory() && !secondFile.getName().startsWith(DownloadUtil.DOWNLOADING_FILE_FLAG)) {
//                            secondFile.delete();
//                        }
//                    }
//                } else {
//                    if (!file.getName().startsWith(DownloadUtil.DOWNLOADING_FILE_FLAG)) {
//                        file.delete();
//                    }
//                }
//            }
//        }
//    }
//
//    public static boolean checkDownloadExist(String albumId, String soundId) {
//        File file = new File(FileUtil.getDownloadFileDir(albumId), soundId);
//        if (file.exists()) {
//            return true;
//        }
//        return false;
//    }
//
//    /**
//     * 获取路径下所有的文件，支持二层目录搜索
//     *
//     * @param path 要查找的路径
//     */
//    public static List<File> getAllFile(String path) {
//        List<File> fileList = new ArrayList<>();
//        File routeFile = new File(path);
//        if (routeFile.isDirectory()) {
//            File[] childFiles = routeFile.listFiles();
//            for (File file : childFiles) {
//                if (file.isDirectory()) {
//                    File[] secondChildFiles = file.listFiles();
//                    for (File secondFile : secondChildFiles) {
//                        if (!secondFile.isDirectory()) {
//                            if (!secondFile.getName().startsWith(DownloadUtil.DOWNLOADING_FILE_FLAG)) {
//                                fileList.add(secondFile);
//                            }
//                        }
//                    }
//                } else {
//                    if (!file.getName().startsWith(DownloadUtil.DOWNLOADING_FILE_FLAG)) {
//                        fileList.add(file);
//                    }
//                }
//            }
//        }
//        return fileList;
//    }
//
//    /**
//     * 查找对应 id 的声音文件是否下载
//     *
//     * @param soundId
//     * @return
//     */
//    public static String searchDownloadFile(String soundId) {
//        File routeFile = new File(getDownloadFileDir());
//        if (routeFile.isDirectory()) {
//            File[] childFiles = routeFile.listFiles();
//            for (File file : childFiles) {
//                if (file.isDirectory()) {
//                    File[] secondChildFiles = file.listFiles();
//                    for (File secondFile : secondChildFiles) {
//                        if (!secondFile.isDirectory()) {
//                            if (secondFile.getName().equals(soundId)) {
//                                return secondFile.getPath();
//                            }
//                        }
//                    }
//                } else {
//                    if (file.getName().equals(soundId)) {
//                        return file.getPath();
//                    }
//                }
//            }
//        }
//        return null;
//    }
//
//    /**
//     * 获取路径下所有的文件夹
//     *
//     * @param path 要查找的路径
//     */
//    public static List<File> getAllDirFile(String path) {
//        List<File> fileList = new ArrayList<>();
//        File routeFile = new File(path);
//        if (routeFile.isDirectory()) {
//            File[] childFiles = routeFile.listFiles();
//            for (File file : childFiles) {
//                if (file.isDirectory()) {
//                    fileList.add(file);
//                }
//            }
//        }
//        return fileList;
//    }
//
//    /***
//     * 获取文件个数
//     ***/
//    public static long getlist(File f) {// 递归求取目录文件个数
//        long size = 0;
//        File flist[] = f.listFiles();
//        size = flist.length;
//        for (int i = 0; i < flist.length; i++) {
//            if (flist[i].isDirectory()) {
//                size = size + getlist(flist[i]);
//                size--;
//            }
//        }
//        return size;
//    }

    /**
     * 获取下载目录路径
     *
     * @param dir 下载目录子目录名
     * @return 下载目录路径
     */
    public static String getDownloadFileDir(String dir) {
        String dirPath;
        if (TextUtils.isEmpty(dir)) {
            dirPath = DOWNLOAD_DIR;
        } else {
            dirPath = DOWNLOAD_DIR + "/" + dir;
        }
        File dirFile = new File(dirPath);
        if (!dirFile.exists()) {
            dirFile.mkdirs();// 目录不存在的情况下，创建目录
        }
        return dirPath;
    }

    /**
     * 获取下载目录路径
     *
     * @return 下载目录路径
     */
    public static String getDownloadFileDir() {
        String dirPath = DOWNLOAD_DIR;
        File dirFile = new File(dirPath);
        if (!dirFile.exists()) {
            dirFile.mkdirs();// 目录不存在的情况下，创建目录
        }
        return dirPath;
    }
}
